import store from '@/store'
import axios from 'axios'
import router from '@/router'
import { Promise } from 'core-js'
// import { MessageBox, Message } from 'element-ui'
// import store from '@/store'
// import { getToken } from '@/utils/auth'

// 导入导出的两种方式：
/*
1.按需导出:
  export function ***(){} ---> 导入 import { *** } from ''
2.默认导出:
  export default *** ---> 导入 import *** from ''
*/

// create an axios instance (axios.create()创建一个自定义配置的 axios实例)
// 等同于以前的axios 可以用service发起请求
const service = axios.create({
  // baseURL axios请求基地址：完整地址baseURL + url -> 要请求的完整地址
  // baseURL: 'http://ihrm-java.itheima.net', // 设置axios请求的基础的基础地址
  // withCredentials: true,// 表示每次请求可以携带 cookie 和 session
  timeout: 5000 // request timeout 定义请求超时判定条件 5000毫秒
})

// request interceptor 请求拦截器 加token config配置
service.interceptors.request.use(
  config => {
    // console.log('所有的请求发出去之前，都会先走这个', config)
    // 获取登录信息数据token
    const token = store.state.user.token
    if (token) {
      // token值的校验，假如有token值，配置的请求头授权为token(字符串拼接)
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    console.log(error)
    return Promise.reject(error)
  }
)

// response interceptor 响应拦截器 处理401(无授权) reject拒绝
service.interceptors.response.use(
  response => {
    // console.log('从后端回来数据', response)
    if (response.data.success === false) {
      return Promise.reject(new Error(response.data.message))
    } else {
      return response.data
    }
  },
  error => {
    // return Promise.reject(error)
    // 1.发axiosl时，状态码不是2打头
    // 2.网络问题：超时，断网.
    console.log('响应拦截器，错误信息')
    console.dir(error)
    // 与后端达成的约定为10002，无实义数据
    if (error.response.data.code === 10002) {
      // tokenj过期
      // 1.删除本地登录信息
      store.dispatch('user/userLogout')
      // router.push('/1ogin?return_url='+当前的path)
      // router.currentRoute <====> this.$route
      router.push('/login?return url=' + router.currentRoute.path)
    }
    return Promise.reject(error)
  }
)

// 导出
export default service

/* ----基本格式-------------------
// 导出一个axios的实例  而且这个实例要有请求拦截器 响应拦截器
import axios from 'axios'
const service = axios.create() // 创建一个axios的实例
// service.interceptors.request.use() // 请求拦截器
// service.interceptors.response.use() // 响应拦截器
export default service // 导出axios实例
*/
